/* 
 * File:   Posicion.cpp
 * Author: Monzon Maximiliano.
 * 
 * Created on 25 de septiembre de 2012, 17:02
 */

#include "Posicion.h"

using TP::Grafica::Posicion;

Posicion::Posicion() {
    
    this->setFila(0);
    this->setColumna(0);
    this->setOrientacion(ROTACION_NULA);
}

Posicion::Posicion (const Posicion& pPosicion){

    this->setFila(pPosicion.getFila());
    this->setColumna(pPosicion.getColumna());
    this->setOrientacion(pPosicion.getOrientacion());
}

Posicion::Posicion(const long int pX, const long int pY, const short int pOrientacion) {
    
    this->setFila(pX);
    this->setColumna(pY);
    this->setOrientacion(pOrientacion);
}

Posicion::~Posicion() {
    /*skip*/
}

long int Posicion::getFila() const {
    return this->fila;
}

long int Posicion::setFila(const long int pFila){
    this->fila = pFila;
    return this->fila;
}

long int Posicion::getColumna() const {
    return this->columna;
}

long int Posicion::setColumna(const long int pY) {
    this->columna = pY;
    return this->columna;
}

short int Posicion::getOrientacion () const {
    return this->orientacion;
}

short int Posicion::setOrientacion (const short int pOrientacion) {
    
    short int aux = ROTACION_NULA;
    
    switch (pOrientacion)
    {
        case ROTACION_180H:
        case ROTACION_90HN:
        case ROTACION_0H:
        case ROTACION_90H:
            aux = pOrientacion;
            break;
    }
    this->orientacion = pOrientacion;
            
    return this->orientacion;
}

Posicion& Posicion::operator= (const Posicion &rhs) {
    
    if (this != &rhs)
    {
        this->setFila(rhs.getFila());
        this->setColumna(rhs.getColumna());
        this->setOrientacion(rhs.getOrientacion());
    }
    return *this;
}

const Posicion Posicion::operator+ (const Posicion &rhs) const {
    
    // Instancio el objeto resultante.  El mismo conserva la orientacion del objeto actual.
    Posicion resultado (this->getFila() + rhs.getFila(), this->getColumna() + rhs.getColumna(), this->getOrientacion());
    
    return resultado;
}

const Posicion Posicion::operator- (const Posicion &rhs) const {
    
    // Instancio el objeto resultante.  El mismo conserva la orientacion del objeto actual.
    Posicion resultado (this->getFila() - rhs.getFila(), this->getColumna() - rhs.getColumna(), this->getOrientacion());
    
    return resultado;
}
